perm filename FF[MSS,LCS] blob
sn#122683 filedate 1974-10-01 generic text, type T, neo UTF8
00200 ****** FILLER, HGHT, MISS, HALF ********
00400 C Q AND R ARE X,Y COORDS. NE(1)=WDCNT. OTHER NE'S HAVE 3
00600 C FOR INVIS. VECTORS. M=VERTICAL SCAN LINES
00800 SUBROUTINE FILLER(Q,R,NE,M)
01000 DIMENSION Q(1),R(1),NE(1)
01200 KK=NE(1)
01400 CC LA=0
01600 KJ=2
01800 DO 4 K=2,KK
02000 IF(NE(K).NE.3)GO TO 11
02200 CCCC NE(K)=KJ
02400 NE(K)=-1
02600 KJ=K+1
02800 GO TO 4
03000 11 NE(K)=0
03200 4 CONTINUE
03400 RLFT=1000
03600 RT=-1000
03800 B=RT
04000 DO 12 K=1,KK
04200 H=IFIX(Q(K))
04400 IF(H.LT.RLFT)RLFT=H
04600 C FINDS LEFT AND RIGHT LIMITS.
04800 IF(H.GT.RT)RT=H
05000 IF(H.EQ.B)NE(K)=-1
05200 C FINDS VERTICAL LINES.
05400 B=H
05600 Q(K)=H
05800 12 R(K)=IFIX(R(K))
06000 CCCC NE(KK+1)=KJ
06200 NE(KK+1)=-1
06400 C FINDS JUMPS
06600 LEFT=RLFT
06800 LRT=RT
07000 JA=3
07200 123 DO 41 K=2,KK
07400 41 IF(NE(K).EQ.0)GO TO 51
07600 RETURN
07800 C NO MORE LINES TO LOOK AT.
08000
08200 51 J=LEFT
08400 CC RJ=J+.001
08600 CC IF(J.EQ.KK)RJ=RJ-.002
08800 42 RJ=J+.001
09000
09200 300 DO 44 K=2,KK
09400 C WE'RE LOOKING FOR TOP AVAILABLE LINE TO DRAW DOWN FROM.
09600 IF(NE(K).NE.0)GO TO 44
09800 IF(MISS(K,RJ,Q))GO TO 44
10000 C JUMP IF DOES NOT HIT LINE.
10200 ALT=HGHT(K,RJ,Q,R)
10400 B=ALT
10600 C ALTITUDE OF THIS POINT
10800 C NEXT LOOKS TO SEE IF 'ALT' IS HIGHEST AVAILABLE POINT.
11000 JJ=-1
11200 ALT=-1000.
11300 JJ=K
11400 200 DO 45 L=2,KK
11600 IF(L.EQ.K.OR.NE(L).LT.0)GO TO 45
11800 C PASSES ANY LINE THAT HAS BEEN USED FOR ↑ OR ↓ SO FAR.
12000 C NE=-1 ↓; =1 ↑;
12200 IF(MISS(L,RJ,Q))GO TO 45
12400 C FINDS HIGHEST UNUSED LINE UNDER J
12600 H=HGHT(L,RJ,Q,R)
12800 IF(H.LT.ALT)GO TO 45
13000 ALT=H
13200 CC JJ=K
13400 45 CONTINUE
13500 CC IF(JJ)GO TO 44
13550 IF(ALT.EQ.-1000)GO TO 46
13600 CC IF(IFIX(B-ALT+.5))44,52,46
13610 H=B-ALT
13620 IF(H-.0001)44,52,46
13800 C SKIP IF POINT IS TOO HIGH. IF =, CHECK LINE LENGTH.
14000 52 IF(ABS(Q(K)-Q(K-1))-ABS(Q(L)-Q(L-1)))53,54,46
14200 C USE LONG LINE. IF =, USE NEITHER.
14400 54 NE(L)=-1
14600 53 NE(K)=-1
14800 GO TO 44
15000 CC IF(B.LT.ALT+.1)GO TO 44
15200 C SKIPS VERY NEAR LINES.
15400 CC46 IF(LA.NE.K)JA=3
15500 46 JA=3
15600 KN=Q(JJ)
15800 KL=Q(JJ-1)
16000 IF(KN.GT.KL)GO TO 50
16200 KL=KN
16400 KN=Q(JJ)
16600 50 NE(JJ)=-1
16800 DO 49 I=KL,KN,M
17000 RJ=I+.001
17200 IF(I.EQ.KN)RJ=RJ-.002
17300 ALT=HGHT(JJ,RJ,Q,R)
17400 CALL LINES(RJ,ALT,JA)
17600 CC LA=K
17800 C NEXT FINDS HIGHEST POINT TO DRAW TO.
18000 B=-1000
18200 JK=-1
18400 400 DO 47 L=2,KK
18600 IF(MISS(L,RJ,Q).OR.NE(L).LT.0)GO TO 47
18800 H=HGHT(L,RJ,Q,R)
19000 IF(H.GT.ALT+.1)GO TO 47
19200 IF(H.LE.B)GO TO 47
19300 B=H
19400 C FINDS HIGHEST POINT.
19600 JK=L
19800 47 CONTINUE
20000 IF(JK)GO TO 48
20200 100 CALL LINES(RJ,B,2)
20400 NE(JK)=1
20600 CALL DPYOUT(1)
20800 49 JA=2
21000 GO TO 51
21200 48 JA=3
21400 44 CONTINUE
21600 43 J=J+M
21800 C M IS SET IN FILLMS
22000 IF(J.LE.LRT)GO TO 42
22200 END
22400
22600 FUNCTION HGHT(J,A,Q,R)
22800 DIMENSION Q(1),R(1)
23000 B=R(J-1)
23200 D=Q(J-1)
23400 F=Q(J)
23600 HGHT=((R(J)-B)*(A-D))/(F-D)+B
23800 IF(F.EQ.D)HGHT=B
24000 END
24200
24400 FUNCTION MISS(J,A,Q)
24600 DIMENSION Q(1)
24800 B=Q(J)
25000 C=Q(J-1)
25200 MISS=-1
25400 IF((A.LT.C.AND.A.GT.B).OR.(A.LT.B.AND.A.GT.C))MISS=0
25600 END
25800 C MISS=-1, HIT=0